标签
拦截器
字数
164 字
阅读时间
1 分钟
一、过滤器添加特定地址拦截
java
import com.commnetsoft.commons.utils.StringUtils;
import com.commnetsoft.commons.utils.UriUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* WS过滤器<br/>
* 该过滤器只支持Websocket请求,其他的请求统统拒绝
*
* @author Brack.zhu
* @date 2020/6/16
*/
@Component
public class WsFilter implements GlobalFilter, Ordered, IBaseFilter {
/**
* WS URL接口后缀 .ws
*/
public static final String WEBSOCKET_URL_SUFFIX = "ws";
private Logger log = LoggerFactory.getLogger(WsFilter.class);
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
String uri = request.getPath().value();
String ext = UriUtil.getFileExtension(uri);
if (StringUtils.isNotBlank(ext) && WEBSOCKET_URL_SUFFIX.equals(ext)) {
String ip = getRequestIp(request);
log.info("放行ws地址:{},ip:{}", uri, ip);
return chain.filter(exchange);
}
//禁止所有非WS请求
return requestInvalid(exchange, HttpStatus.FORBIDDEN);
}
@Override
public int getOrder() {
return -1;
}
}